package beans;

import java.util.*;
import java.sql.*;
import dbUtil.*;
import utils.*;
import iteradores.IteradorAtributo;
/**
 * Clase que representa el bean de la tabla Atributo de la BD
 * @author José Giménez, Gustavo Planás, Esteban Benítez
 */
public class Atributo extends PgAbm implements Abm  {
    /**
     * Constructor de la clase Atributo
     */
    public Atributo() 
    {
        // Seteamos el nombre de la tabla a consultar
        super.setTableName("atributo");
        
        // Se establecen los campos de la tabla
        ArrayList array_campos = new ArrayList();
        array_campos.add("idatributo"); 
        array_campos.add("nombre");      
        array_campos.add("tipo");      
        array_campos.add("usuario_ing");
        array_campos.add("fecha_ing");
        
        // Se establece la clave
        ArrayList array_claves = new ArrayList(); 
        array_claves.add("idatributo");
        
        // Inicializamos el hash que contendra los valores de la tabla
        super.initMapping();
        
        // Se establecen estos valores en el padre
        super.setCampos(array_campos);
        super.setClaves(array_claves); 
        
        //Seteamos qué secuenciador utiliza la tabla para pk.
        super.setSequence("idatributo", "idatributo_idatributo_seq");
    }

    /**
     * Obtiene el Id del Atributo
     * @return ID del atributo seleccionado
     */
    public String getIdAtributo() {
        return (String) getMapValue("idatributo");
    }

    /**
     * Setea el valor del ID del atributo seleccionado
     * @param Nuevo ID del atributo
     */
    public void setIdAtributo(String idatributo) {
        setMapValue("idatributo", idatributo);
    }

    /**
     * Obtiene el Nombre del atributo
     * @return Nombre del atributo seleccionado
     */
    public String getNombre() {
        return (String) getMapValue("nombre");
    }

    /**
     * Setea el valor del nombre del atributo
     * @param nombre Nuevo nombre del atributo
     */
    public void setNombre(String nombre) {
        setMapValue("nombre", nombre);
    }

    /**
     * Obtiene el Tipo de atributo
     * @return Descripción del tipo de atributo
     */
    public String getTipo() {
        return (String) getMapValue("tipo");
    }

    /**
     * Setea el tipo de atributo
     * @param tipo Nuevo tipo del atributo
     */
    public void setTipo(String tipo) {
        setMapValue("tipo", tipo);
    }

    /**
     * Obtiene el Nombre del usuario ingresante
     * @return Nombre del usuario ingresante
     */
    public String getUsuario_ing() {
        return (String) getMapValue("usuario_ing");
    }

    /**
     * Setea el usuario ingresante
     * @param usuario_ing Nombre del usuario ingresante
     */
    public void setUsuario_ing(String usuario_ing) {
        setMapValue("usuario_ing", usuario_ing);
    }

    /**
     * Obtiene la fecha de ingreso del atributo
     * @return Fecha de ingreso del atributo
     */
    public String getFecha_ing() {
        return (String) getMapValue("fecha_ing");
    }

    /**
     * Setea la fecha de ingreso del atributo
     * @param fecha_ing Nueva fecha de ingreso del atributo
     */
    public void setFecha_ing(String fecha_ing) {
        setMapValue("fecha_ing", fecha_ing);
    }

    /**
     * Obtiene el Iterador del bean atributo
     * @return Iterador del atributo
     * @throws java.lang.Exception
     */
    public Iterador getIterator() throws Exception
    {
        ResultSet rs_datos = super.getResultSet();
        IteradorAtributo iter = new IteradorAtributo(rs_datos);    
        return iter;  
    }
    
    /**
     * Obtiene la lista completa de los atributos en la BD
     * @return Cantidad de filas traídas en la consulta
     * @throws java.lang.Exception
     */
    public int getAtributos() throws Exception{
        String sql_query = "";
        int cant_filas;
        ResultSet rs_datos = super.getResultSet();
        
        sql_query = "select * from atributo order by 2 ";
        
        sql_query += getLimitOffset();
        
        Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
                                            ResultSet.CONCUR_READ_ONLY);
              
        // Se ejecuta la consulta y se recupera el ResultSet        
        System.out.println("SQL: "+ sql_query);
        rs_datos = stm.executeQuery(sql_query);                   
        
        cant_filas = 0;        
        if (rs_datos.last()) 
        {          
            cant_filas = rs_datos.getRow();
            rs_datos.beforeFirst();        
        }     
        System.out.println("Cantidad Filas: " + cant_filas);
        return cant_filas;
    }
}
